package org.HU.train.member.controller;

import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.HU.train.common.response.CommonResp;
import org.HU.train.member.request.member.MemberLoginReq;
import org.HU.train.member.request.member.MemberRegisterReq;
import org.HU.train.member.request.member.MemberSendCodeReq;
import org.HU.train.member.response.MemberLoginResp;
import org.HU.train.member.service.MemberService;
import org.springframework.web.bind.annotation.*;

/**
 * @Author ZUZ
 * @Description: TODO
 * @Date 2024-12-17 17:10
 * @ClassName: MemberController
 */
@RestController
@RequestMapping("/member")
public class MemberController {

    @Resource
    private MemberService memberService;

    /**
     * 查找用户总数目
     * 返回具体数目
     */
    @GetMapping("/count")
    public CommonResp<Integer> count(){
        int count = memberService.count();
        return new CommonResp<>(count);
    }

    /**
     * 用户注册
     * 输入手机号
     * 返回雪花算法生成的主键ID
     */
    @PostMapping("/register")
    //这里的前端请求mobile会自动映射到req的属性，所以前端请求mobile要与req对应的属性相一致
    public CommonResp<Long> register(@Valid @RequestBody MemberRegisterReq req){
        long register = memberService.register(req);
        return new CommonResp<>(register);
    }

    /**
     * 发送短信验证码
     * 输入手机号
     * 无返回值
     * 该功能待增强
     */
    @PostMapping("/send-code")
    public CommonResp<Long> sendCode(@Valid @RequestBody MemberSendCodeReq req){
        memberService.sendCode(req);
        return new CommonResp<>();
    }

    /**
     * 登录
     * 输入手机号和短信验证码
     * 返回member表主键ID、电话、生成的JWT
     */
    @PostMapping("/login")
    public CommonResp<MemberLoginResp> sendCode(@Valid @RequestBody MemberLoginReq req){
        MemberLoginResp memberLoginResp = memberService.login(req);
        return new CommonResp<>(memberLoginResp);
    }


}
